package Test32;

import java.util.ArrayList;

/*
需求：定义一个方法，形参是一个集合，但是集合中的数据类型不确定。
 */
public class Test14 {
    public static void main(String[] args) {

        //创建集合的对象
        ArrayList<Ye14> list1 = new ArrayList<>();
        ArrayList<Fu14> list2 = new ArrayList<>();
        ArrayList<Zi14> list3 = new ArrayList<>();

        ArrayList<Student14> list4 = new ArrayList<>();

        //调用method方法
        method(list1);
        method(list2);
        //method(list3);

        //method(list4);
    }

    //弊端：利用泛型方法有一个小弊端，此时他可以接收任意的数据类型

    /*
    希望:本方法虽然不确定类型，但是以后我希望只能传递Ye Fu Zi

    此时我们就可以使用泛型的通配符:
            ?也表示不确定的类型
            他可以进行类型的限定
            ?extends E:表示可以传递E或者E所有的子类类型
            ?superE:表示可以传递E或者E所有的父类类型

     应用场景：
            1、如果我们在定义类、方法、接口的时候，如果类型不确定，就可以定义泛型类、泛型方法、泛型接口。
            2、如果类型不确定，但是能知道以后只能传递某个继承体系中的，就可以泛型的通配符
     泛型的通配符：
            关键点：可以限定类型的范围。
     */
    public static void method(ArrayList<? super Fu14> list) {

    }
}

class Ye14 {
}

class Fu14 extends Ye14 {
}

class Zi14 extends Fu14 {
}

class Student14 {
}
